package tests;

import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class RegisterPage extends Utils {
    // 指定页面的 URL
    private static String url = "http://120.27.122.55:8080/register.html";
    // 设置显式等待
    private WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2));
    // 创建构造方法, 传入 url
    public RegisterPage() {
        super(url);
    }

    // 测试页面是否成功加载
    public void registerPageRight() throws InterruptedException {
        // 通过查看页面元素是否存在来检查页面加载是否成功
        // 查找确认密码输入框
        driver.findElement(By.cssSelector("#ackpassword"));
        // 查找显示信息的标题
        driver.findElement(By.cssSelector("body > div.container > div > h3"));
        // 获取当前页面的标题信息
        String title = driver.getTitle();
        // 验证当前页面标题信息
        assert title.equals("注册");
    }

    // 检查登录功能----注册失败
    public void registerFail() {
        // 1. 测试确认密码为空
        // 刷新当前页面,防止输入框中残留信息
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        // 显式等待弹窗出现
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = driver.switchTo().alert();
        // 验证弹窗的文本信息
        assert alert.getText().equals("两次密码输入不一致,请重新输入!!");
        // 点击确定,关闭弹窗
        alert.accept();
        // 2. 测试用户名已经存在
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#ackpassword")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());
        assert alert.getText().equals("该用户名已被注册!!");
        alert.accept();
        // 3. 测试 确认密码 与 密码 不一致
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#ackpassword")).sendKeys("321");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());
        assert alert.getText().equals("两次密码输入不一致,请重新输入!!");
        alert.accept();
        // 4. 测试密码与确认密码都为空
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());
        assert alert.getText().equals("密码不能为空!!");
        alert.accept();
        // 5. 测试新用户名, 确认密码为空
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys("admin");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());
        assert alert.getText().equals("两次密码输入不一致,请重新输入!!");
        alert.accept();
        // 6. 测试新用户名, 确认密码 与 密码 不一致
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys("admin");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#ackpassword")).sendKeys("321");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());
        assert alert.getText().equals("两次密码输入不一致,请重新输入!!");
        alert.accept();
        // 7. 测试新用户名, 密码为空
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys("admin");
        driver.findElement(By.cssSelector("#ackpassword")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());
        assert alert.getText().equals("密码不能为空!!");
        alert.accept();
        // 8. 测试用户名为空
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#ackpassword")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        wait.until(ExpectedConditions.alertIsPresent());
        assert alert.getText().equals("用户名不能为空!!");
        alert.accept();
    }

    // 检查登录功能----注册成功
    public void registerSuc() {
        // 刷新当前页面,防止输入框有残留信息
        driver.navigate().refresh();
        // 输入新的用户名, 一致的密码 与 确认密码
        driver.findElement(By.cssSelector("#username")).sendKeys("admin8");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#ackpassword")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        // 显式等待, 等待弹窗出现
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = driver.switchTo().alert();
        // 验证弹窗文本信息
        assert alert.getText().equals("注册成功!");
        // 点击确定
        alert.accept();
        // 获取当前页面标题
        String title = driver.getTitle();
        // 验证当前页面标题信息,观察是否成功跳转
        assert title.equals("登录");
    }

    // 检查返回链接是否正常
    public void registerBack() {
        // 跳转到注册页面
        driver.get(url);
        // 查找返回链接并点击
        driver.findElement(By.cssSelector("body > div.container > div > div:nth-child(6) > a")).click();
        // 获取当前页面的标题
        String title = driver.getTitle();
        // 验证页面标题信息, 观察是否成功跳转
        assert title.equals("登录");
    }

}
